To provide some background of a virtual machine, abstracted representations of several computing systems are first described. FIG. 1 depicts an abstracted representation of computing system 100 with a plurality of software applications (hereinafter, “applications”), a single operating system and physical hardware. Such components at times may be referred to as the different “layers” of the computing system (i.e., applications layer, operating system layer, physical hardware layer). The applications utilize the physical hardware (e.g., processors, memory, disk drives, network interface card, sound card, etc.) to help a user perform a specific task (e.g., word processing, surfing the web, etc.). The applications, however, typically do not interact directly with the physical hardware of computing system 100. Instead, the applications interact with the physical hardware through an operating system. For example, an application may send a request to the operating system to store data on a storage device of the physical hardware, and the operating system, in turn, may perform such request on behalf of the application. A single operating system typically hosts a plurality of applications, and accordingly, is tasked with managing how the applications share the resources of the physical hardware so that there are no contentions, data corruption, etc. On the other hand, the physical hardware of computer system 100 can typically only host a single operating system (or more precisely, only one operating system at any moment).
FIG. 2 depicts an abstracted representation of computing system 200 with an added layer between the operating system and the physical hardware. This layer is called the hypervisor (or also the virtual machine manager). In an analogous manner to how an operating system can manage how a plurality of applications share the resources of the physical hardware, the hypervisor can manage how a plurality of operating systems share the resources of the physical hardware. In computing system 200, the top two layers (i.e., applications and operating system) can be bundled together as a single unit, called a virtual machine.
Since the hypervisor allows a plurality of operating systems to execute at the same time, a plurality of virtual machines can also execute at the same time. Such an arrangement is depicted in computer system 300 of FIG. 3, in which the hypervisor hosts a plurality of virtual machines (VMs). Each virtual machine could be a virtual desktop, allowing a plurality of users to share the resources of the physical hardware. Alternatively, each virtual machine could be a web server and/or an application server, allowing a plurality of enterprises to share the resources of the physical hardware.
A virtual machine is typically characterized by the following information: virtual machine data, virtual machine configuration, and virtual machine operational state. Virtual machine data may refer to the contents of the virtual machine's hard disk (i.e., in-disk data). Such contents may include the virtual machine's operating system and application data. In some cases, a virtual machine's hard disk may correspond to a dedicated physical hard disk (i.e., physical hard disk that is dedicated to the virtual machine), while in other cases it may correspond to a collection of hard disks shared by a number of virtual machines. In the latter case, a virtual machine's hard disk may more specifically correspond to portions of one or more physical hard disks that are accessible to the virtual machine. In some cases, a virtual machine's hard disk is represented by one or more files (e.g., .vmdk files) (also called “virtual disks” or “virtual hard disks”) that are stored in the collection of hard disks. Virtual machine data may additionally refer to the contents of the virtual machine's memory (i.e., in-memory data). Typically, a virtual machine's memory does not correspond to a dedicated memory card or memory chip (i.e., memory card or memory chip that is dedicated to the virtual machine). Rather, a pool of memory (e.g., formed by a plurality of memory cards and/or memory chips) is typically shared by a number of virtual machines, so a virtual machine's memory more accurately corresponds to portions of one or more memory cards and/or memory chips that are accessible to the virtual machine.
Virtual machine configuration may refer to the hardware resources required or requested by a virtual machine (e.g., the number of virtual central processing units (CPUs), an amount of random-access memory (RAM), the number of network interface cards (NICs), etc., and what type of each of the hardware components, if the hardware components come in different types). A virtual CPU refers to one or more CPUs of the physical hardware that may be shared by one or more virtual machines.
Virtual machine operational state may refer to the operational state of a virtual machine (e.g., whether the virtual machine is powered off, powered on, suspended, whether the contents of the virtual machine's memory have been written to a swap file, the number of virtual machine snapshots, the relationship between snapshots and the virtual machine's disks, etc.).
The state of a virtual machine typically refers to one or more of the virtual machine data, the virtual machine configuration, and virtual machine operational state at a particular point in time. In some cases, the state of a virtual machine refers to the virtual machine data, the virtual machine configuration, and virtual machine operational state (i.e., all three) at a particular point in time. It is noted that there is a potential for confusion in terminology as the “virtual machine operational state” is sometimes called “virtual machine state” by those in the field of the art, so it is necessary to rely on the context in which the term (i.e., virtual machine state) is used in order to determine whether virtual machine state refers to one or more of the virtual machine data, the virtual machine configuration, and virtual machine operational state at a particular point in time, or just the virtual machine operational state. To avoid such confusion, virtual machine state will hereinafter refer to one or more of the virtual machine data, the virtual machine configuration, and virtual machine operational state at a particular point in time. When referring specifically to the virtual machine operational state, the term “virtual machine operational state” will be used rather than the “virtual machine state”.
An operation that can be performed to preserve the state of a virtual machine at a particular point in time is called snapshotting. The information representing the state of a virtual machine at a particular point in time, after a snapshotting operation, may be called a virtual machine snapshot (or just a snapshot in short, if the context is clear). After a snapshot is taken at a particular time, a user can revert to the state of the virtual machine at that particular time (i.e., return one or more of the virtual machine data, virtual machine operational state, and virtual machine configuration to the state they were in at the time the snapshot was taken).